package main

import "fmt"

// 方式1，一个匿名返回值
// fun 函数名(参数1 参数1类型,参数2 参数2类型 ) 返回值类型
// return 返回值
func foo1(a string, b int) int {
	fmt.Println("a = ", a)
	fmt.Println("b = ", b)
	c := 100
	return c
}

// 方式2，多个匿名返回值
// fun 函数名(参数1 参数1类型, 参数2 参数2类型 ) (返回值1类型, 返回值2类型...)
// return 返回值1,返回值2...
func foo2(a string, b int) (string, int) {
	c := "100"
	d := 200
	return c, d
}

// 方式3，多个形参名返回值
// fun 函数名(参数1 参数1类型, 参数2 参数2类型 ) (返回值1 返回值1类型, 返回值2 返回值2类型...)
// return [返回值1,返回值2...]
func foo3(a string, b int) (c string, d int) {
	c = "300"
	d = 400
	return
}

// 方式4，多个形参名返回值
// fun 函数名(参数1 参数1类型, 参数2 参数2类型 ) (返回值1, 返回值2 所有返回值类型...)
// return [返回值1,返回值2...]
func foo4(a string, b int) (c, d int) {
	fmt.Println("形参在使用前是会初始化的")
	fmt.Println("c = ", c, " d = ", d)
	c = 500
	return c, 600
}

func main() {
	c := foo1("1", 2)
	println("c =", c)
	x, y := foo2("200", 0)
	fmt.Printf("x = %s,y = %d\n", x, y)
	x, y = foo3("200", 0)
	fmt.Printf("x = %s,y = %d\n", x, y)
	var m, n = foo4("200", 0)
	fmt.Println("m = ", m, " n = ", n)
}
